package fr.lna.chess.ui;

import javax.swing.Action;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import fr.lna.chess.ui.action.DefautAction;
import fr.lna.chess.ui.type.ACTION_APP;
import fr.lna.util.MessageTools;

/**
 * Service fournissant les actions
 * @author bull
 *
 */
@Component("action.service")
public class ActionService implements ApplicationContextAware{

	private ApplicationContext appCtx;

	/**
	 * Cherche dans le contexte applicatif une action avec le nom passé en paramètre
	 * 
	 * @param name nom de l'action dans le contexte spring
	 * @return
	 */
	public Action getAction(ACTION_APP name) {
		ChessAction act  = null;	
		try {
				act = appCtx.getBean(getActionCtxName(name), ChessAction.class);
			}
			catch(NoSuchBeanDefinitionException nsbd) {
				// gérér création de l'action impossible
			}
		if (act == null) {
			act = new DefautAction();
		}
		return act;
	}

	private String getActionCtxName(ACTION_APP name) {
		return MessageTools.genCode(name, "", '.');
	}

	@Override
	public void setApplicationContext(ApplicationContext appCtx)
			throws BeansException {
		this.appCtx =  appCtx;
	}

}
